home *** CD-ROM | disk | FTP | other *** search
/ FM Towns: Free Software Collection 7 / FM Towns Free Software Collection 7.iso / ms_dos / ioinp / ioinp.asm next >
Assembly Source File  |  1993-11-30  |  7KB  |  351 lines

  1. ;------------------------------------------------------
  2. ;ioinp.asm    io直接書き込みTOOL for Batch file
  3. ;電脳わ-るど DW0049 BY しんちゃん(^_^)
  4. ;------------------------------------------------------
  5. .8086
  6. PSP_cmd_tail    equ    81h            ; コマンド引数のアドレス
  7. CR        equ    13            ; リターン文字コード(0Dh)
  8.  
  9. seg_inp        segment    byte public
  10.         assume    cs:seg_inp, ds:seg_inp
  11.  
  12.         org    100h
  13.  
  14. ioinp        proc    far
  15.  
  16. start:
  17.         mov    si,PSP_cmd_tail
  18.         mov    bl,[si]
  19.         cmp    bl,CR
  20.         je    TAITORU
  21.         jmp    MOJI_CHK        ; 最初の文字検索にジャンプ
  22. MOJI_chkBAR:
  23.         inc    si
  24.         mov    bl,[si]
  25.         cmp    bl,'i'            ; 'i'の時
  26.         je    I_NOTOKI        ; イコールjmp
  27.         cmp    bl,'I'            ; 'I'の時
  28.         je    I_NOTOKI        ; イコールjmp
  29.         cmp    bl,'c'            ; 'c'の時
  30.         je    C_NOTOKI        ; イコールjmp
  31.         cmp    bl,'C'            ; 'C'の時
  32.         je    C_NOTOKI        ; イコールjmp
  33.         mov    dx,offset ERR_PARA_TIGAU
  34.         call    STR_SYORI
  35.         jmp    MOJI_CHK        ; 最初の文字検索にジャンプ
  36. I_NOTOKI:
  37.         mov    cl,1
  38. C_NOTOKI:
  39.         inc    si
  40.         mov    bl,[si]
  41.         cmp    bl,' '            ; ' 'の時
  42.         je    SP_NOTOKI        ; イコールjmp
  43.         mov    dx,offset ERR_PARA_HUMEI
  44.         call    STR_SYORI
  45. MOJI_CHK:
  46.         xor    cx,cx            ; cx=0 //Zero register
  47.         mov    bl,[si]
  48.         cmp    bl,'-'            ; '-'の時
  49.         je    MOJI_chkBAR        ; イコールjmp
  50.         cmp    bl,CR            ; リターン文字コード
  51.         je    EXIT            ; イコールjmp
  52.         inc    si
  53.         jmp    MOJI_CHK        ; 最初の文字検索にジャンプ
  54. EXIT:
  55.         mov    ah,4Ch
  56.         mov    al,0
  57.         int    21h            ; DOS function 4Ch
  58.                         ; al=return code(おわり)
  59. TAITORU:
  60.         mov    dx,offset MES_4
  61.         call    STR_SYORI
  62.         jmp    EXIT
  63. SP_NOTOKI:
  64.         inc    si
  65.         mov    bl,[si]
  66.         cmp    bl,'0'            ; '0'以下の時
  67.         jb    MOJI_JMP        ; 次の文字検索にジャンプ
  68.         cmp    bl,'9'            ; '9'以上の時
  69.         ja    MOJI_JMP        ; 次の文字検索にジャンプ
  70.         sub    bl,'0'            ;30h文字コード引く
  71.         jmp    DATA_HOKAN
  72. MOJI_JMP:
  73.         cmp    bl,'A'            ; 'A'以下の時
  74.         jb    MOJI_JMP2        ; 次の文字検索にジャンプ
  75.         cmp    bl,'F'            ; 'F'以上の時
  76.         ja    MOJI_JMP2        ; 次の文字検索にジャンプ
  77.         sub    bl,'1'            ;31h文字コード引く
  78.         jmp    DATA_HOKAN
  79. MOJI_JMP2:
  80.         cmp    bl,'a'            ; 'a'以下の時
  81.         jb    MOJI_ERR        ; エラー表示にジャンプ
  82.         cmp    bl,'f'            ; 'f'以上の時
  83.         ja    MOJI_ERR        ; エラー表示にジャンプ
  84.         sub    bl,'1'+' '        ;51h文字コード引く
  85.         jmp    DATA_HOKAN
  86. MOJI_ERR:
  87.         mov    dx,offset ERR_SUUJI_TIGAU
  88.         call    STR_SYORI
  89.         jmp    MOJI_CHK        ; 最初の文字検索にジャンプ
  90. DATA_HOKAN:
  91.         call    NANIYATTE
  92.         cmp    ch,1
  93.         je    DAT
  94.         mov    dx,ADOL
  95.         call    SHL_4
  96.         add    dl,bl
  97.         mov    ADOL,dx
  98.         jmp    ADO
  99. DAT:
  100.         mov    dl,DATA
  101.         call    SHL_4
  102.         add    dl,bl
  103.         mov    DATA,dl
  104. ADO:
  105.         mov    bl,[si+1]
  106.         cmp    bl,CR            ; 次がCRの時
  107.         je    HYOUJI            ; イコールjmp
  108.         cmp    bl,' '            ; ' 'の時
  109.         je    HYOUJI            ; イコールjmp
  110.         jmp    SP_NOTOKI
  111. HYOUJI:
  112.         cmp    cl,0
  113.         jne    HYOUJI2
  114.         jmp    C_END
  115. HYOUJI2:
  116.         cmp    ch,1
  117.         je    HENKOU
  118.         inc    si
  119.         call    IN_NOTOKI
  120.         mov    ch,1
  121.         jmp    SP_NOTOKI
  122. HENKOU:
  123.                         ;変更処理開始する。
  124.         mov    dx,offset MES_2
  125.         call    STR_SYORI
  126.         mov    al,DATA
  127.         mov    dx,ADOL
  128.         out    dx,al
  129. C_END:
  130.         call    IN_NOTOKI
  131.         mov    DATA,0
  132.         mov    ADOL,0
  133.         mov    dx,offset MES_3
  134.         call    STR_SYORI
  135.         jmp    MOJI_CHK        ; 最初の文字検索にジャンプ
  136.  
  137. ioinp        endp
  138.  
  139.  
  140. ;==========================================================================
  141. ;            文字処理
  142. ;==========================================================================
  143.  
  144. STR_SYORI    proc    near
  145.         mov    ah,9
  146.         int    21h            ; DOS Services 文字列表示
  147.         ret
  148. STR_SYORI    endp
  149.  
  150.  
  151. ;==========================================================================
  152. ;            4BITシフト
  153. ;==========================================================================
  154.  
  155. SHL_4        proc    near
  156.         mov    ax,dx
  157.         xor    dx,dx
  158.         shl    ax,1
  159.         shl    ax,1
  160.         shl    ax,1
  161.         shl    ax,1
  162.         mov    dx,ax
  163.         xor    ax,ax
  164.         ret
  165. SHL_4        endp
  166.  
  167.  
  168. ;==========================================================================
  169. ;            10進数と16進数のバグ取り
  170. ;==========================================================================
  171.  
  172. NANIYATTE    proc    near
  173.         cmp    bl,10h
  174.         je    NAN10
  175.         cmp    bl,11h
  176.         je    NAN11
  177.         cmp    bl,12h
  178.         je    NAN12
  179.         cmp    bl,13h
  180.         je    NAN13
  181.         cmp    bl,14h
  182.         je    NAN14
  183.         cmp    bl,15h
  184.         je    NAN15
  185.         ret
  186. NAN10:
  187.         mov    bl,0ah
  188.         ret
  189. NAN11:
  190.         mov    bl,0bh
  191.         ret
  192. NAN12:
  193.         mov    bl,0ch
  194.         ret
  195. NAN13:
  196.         mov    bl,0dh
  197.         ret
  198. NAN14:
  199.         mov    bl,0eh
  200.         ret
  201. NAN15:
  202.         mov    bl,0fh
  203.         ret
  204. NANIYATTE    endp
  205.  
  206.  
  207. ;==========================================================================
  208. ;            DATAから文字列$取り出し表示
  209. ;==========================================================================
  210.  
  211. IN_NOTOKI    proc    near
  212.         mov    dx,ADOL
  213.         call    DISP_SHR
  214.         mov    dx,ADOL
  215.         shl    dx,1
  216.         shl    dx,1
  217.         shl    dx,1
  218.         shl    dx,1
  219.         call    DISP_SHR
  220.         mov    dx,ADOL
  221.         shl    dx,1
  222.         shl    dx,1
  223.         shl    dx,1
  224.         shl    dx,1
  225.         shl    dx,1
  226.         shl    dx,1
  227.         shl    dx,1
  228.         shl    dx,1
  229.         call    DISP_SHR
  230.         mov    dx,ADOL
  231.         shl    dx,1
  232.         shl    dx,1
  233.         shl    dx,1
  234.         shl    dx,1
  235.         shl    dx,1
  236.         shl    dx,1
  237.         shl    dx,1
  238.         shl    dx,1
  239.         shl    dx,1
  240.         shl    dx,1
  241.         shl    dx,1
  242.         shl    dx,1
  243.         call    DISP_SHR
  244.         mov    dx,'='
  245.         mov    ah,2
  246.         int    21h            ; DOS Services 1文字表示
  247.         mov    dx,ADOL
  248.         in    al,dx
  249.         mov    dl,al
  250.         shl    dx,1
  251.         shl    dx,1
  252.         shl    dx,1
  253.         shl    dx,1
  254.         shl    dx,1
  255.         shl    dx,1
  256.         shl    dx,1
  257.         shl    dx,1
  258.         call    DISP_SHR
  259.         mov    dx,ADOL
  260.         in    al,dx
  261.         mov    dl,al
  262.         shl    dx,1
  263.         shl    dx,1
  264.         shl    dx,1
  265.         shl    dx,1
  266.         shl    dx,1
  267.         shl    dx,1
  268.         shl    dx,1
  269.         shl    dx,1
  270.         shl    dx,1
  271.         shl    dx,1
  272.         shl    dx,1
  273.         shl    dx,1
  274.         call    DISP_SHR
  275.         mov    dx,offset MES_1
  276.         call    STR_SYORI
  277.         ret
  278. IN_NOTOKI    endp
  279.  
  280.  
  281. ;==========================================================================
  282. ;            BITシフト戻し
  283. ;==========================================================================
  284.  
  285. DISP_SHR    proc    near
  286.         shr    dx,1
  287.         shr    dx,1
  288.         shr    dx,1
  289.         shr    dx,1
  290.         shr    dx,1
  291.         shr    dx,1
  292.         shr    dx,1
  293.         shr    dx,1
  294.         shr    dx,1
  295.         shr    dx,1
  296.         shr    dx,1
  297.         shr    dx,1
  298.         add    dx,'0'
  299.         call    MODOSI
  300.         mov    ah,2
  301.         int    21h            ; DOS Services 1文字表示
  302.         ret
  303. DISP_SHR    endp
  304.  
  305.  
  306. ;==========================================================================
  307. ;            DATA戻し2
  308. ;==========================================================================
  309.  
  310. MODOSI        proc    near
  311.         cmp    dx,'9'
  312.         ja    MODOSI2
  313.         ret
  314. MODOSI2:
  315.         add    dx,' '+7
  316.         ret
  317. MODOSI        endp
  318.  
  319. ;--------------------------------------------------------------------------
  320.  
  321. DATA        db    0
  322. ADOL        dw    0
  323. ERR_PARA_TIGAU    db    ' パラメータが 違います。',0Dh,0Ah,'$'
  324. ERR_PARA_HUMEI    db    ' スペースが 有りません。',0Dh,0Ah,'$'
  325. ERR_SUUJI_TIGAU    db    ' 数値の入力が おかしいです。',0Dh,0Ah,'$'
  326. MES_1        db    ' です。','$'
  327. MES_2        db    ' 変更します。',0Dh,0Ah,'$'
  328. MES_3        db    0Dh,0Ah,'ok',0Dh,0Ah,'$'
  329. MES_4        db    1BH,5BH,33H,31H,6DH
  330.         db    'io直接入力TOOL ',1BH,5BH,33H,35H,6DH
  331.         db    '「あいおー いんぷっと」 v0.03',1BH,5BH,6DH,'    '
  332.         db    'BY しんちゃん(^_^)',0Dh,0Ah
  333.         db    '-c [ioアドレス]',09h,09h,'(チェックする。)',0Dh,0Ah
  334.         db    '-i [ioアドレス] [パラメータ]',09h,'(書き換える。)',0Dh,0Ah
  335.         db    09h,'例)ioinp -i 5ec 0'
  336.         db    09h,09h,'(「互換モード」にする。)(HR20)',0Dh,0Ah
  337.         db    09h,'例)ioinp -c 5e6'
  338.         db    09h,09h,09h,'(VRAMのwaitを調べる。)(20F以降)',0Dh,0Ah
  339.         db    09h,'例)ioinp -i 5e2 0 -i 5e6 3'
  340.         db    09h,'(メモリーのwaitを「0」に VRAMのwaitを「3」に。)'
  341.         db    0Dh,0Ah,'$'
  342.         db     44h, 57h, 30h, 30h, 34h, 39h, '$'
  343.         db     82h,0B5h, 82h,0F1h, 82h,0BFh
  344.         db     82h,0E1h, 82h,0F1h, 81h, 69h
  345.         db     81h, 4Fh, 81h, 51h, 81h, 4Fh
  346.         db     81h, 6Ah, '$', '$', '$'
  347.  
  348. seg_inp        ends
  349.  
  350.         end    start
  351.